package br.com.tiespec.model.Modelo;

import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import br.com.tiespec.model.Enum.SituClientePortal;

@Entity
@Table(name="ti_cliente_portal")
public class ClientePortal extends EntidadeGenerica {

	private static final long serialVersionUID = 3174503226332043224L;

	@Column(name="nome_completo", length=255, nullable=false)
	private String nomeCompleto;
	
	@Column(name="nome_curto", length=64)
	private String nomeCurto;
	
	@Column(length=2000)
	private String observacoes;
	
	@Enumerated
	@Column(nullable=false)
	private SituClientePortal situacao;
	
	@Column(name="data_cadastro")
	private Date dataCadastro;
	
	@Column(name="data_aprovacao")
	private Date dataAprovacao;
	
	@Basic(fetch=FetchType.LAZY)
	private byte[] logo;

	@OneToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="config_descricao_estendida_id", nullable=true)
	private ConfigDescricaoEstendida confDescricaoEstendida;
	
	@OneToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="responsavel_id", nullable=false)
	private Usuario responsavel;
	
	@OneToMany(mappedBy="cliente", fetch=FetchType.LAZY)
	private List<Usuario> usuarios;
	
	@OneToMany(mappedBy="cliente", fetch=FetchType.LAZY)
	private List<CenarioBase> cenarios;
	
	@OneToMany(mappedBy="clientePortal", fetch=FetchType.LAZY)
	private List<ClienteProjeto> clientesProjeto;
	
	@OneToMany(mappedBy="cliente", fetch=FetchType.LAZY)
	private List<Ator> atores;
	
	@Override
	public String toJson() {
		return "ClientePortal";
	}

	public String getNomeCompleto() {
		return nomeCompleto;
	}

	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}

	public String getNomeCurto() {
		return nomeCurto;
	}

	public void setNomeCurto(String nomeCurto) {
		this.nomeCurto = nomeCurto;
	}

	public SituClientePortal getSituacao() {
		return situacao;
	}

	public void setSituacao(SituClientePortal situacao) {
		this.situacao = situacao;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public Date getDataAprovacao() {
		return dataAprovacao;
	}

	public void setDataAprovacao(Date dataAprovacao) {
		this.dataAprovacao = dataAprovacao;
	}

	public Usuario getResponsavel() {
		return responsavel;
	}

	public void setResponsavel(Usuario responsavel) {
		this.responsavel = responsavel;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	
	public List<ClienteProjeto> getClientesProjeto() {
		return clientesProjeto;
	}
	
	public void setClientesProjeto(List<ClienteProjeto> clientesProjeto) {
		this.clientesProjeto = clientesProjeto;
	}
	
	public ConfigDescricaoEstendida getConfDescricaoEstendida() {
		return confDescricaoEstendida;
	}
	
	public void setConfDescricaoEstendida(
			ConfigDescricaoEstendida confDescricaoEstendida) {
		this.confDescricaoEstendida = confDescricaoEstendida;
	}
	
	public List<Ator> getAtores() {
		return atores;
	}
	
	public void setAtores(List<Ator> atores) {
		this.atores = atores;
	}
	
	public String getObservacoes() {
		return observacoes;
	}
	
	public void setObservacoes(String observacoes) {
		this.observacoes = observacoes;
	}
	
	public byte[] getLogo() {
		return logo;
	}
	
	public void setLogo(byte[] logo) {
		this.logo = logo;
	}
	
	public List<CenarioBase> getCenarios() {
		return cenarios;
	}
	
	public void setCenarios(List<CenarioBase> cenarios) {
		this.cenarios = cenarios;
	}
}